typedef struct _GtkEventController GtkEventController;
typedef struct _GtkGesture GtkGesture;
typedef struct _GtkLayoutManager GtkLayoutManager;
+typedef struct _GtkNative GtkNative;
typedef struct _GtkRequisition GtkRequisition;
typedef struct _GtkRoot GtkRoot;
typedef struct _GtkSelectionData GtkSelectionData;
}
else
{
- g_warning ("Could not compute surface transform");
- surface_transform_data->cached_surface_transform_valid = FALSE;
+ GtkWidget *native = GTK_WIDGET (gtk_widget_get_native (widget));
+
+ if (gtk_widget_compute_transform (widget, native,
+ &surface_transform_data->cached_surface_transform))
+ {
+ surface_transform_data->cached_surface_transform_valid = TRUE;
+ }
+ else
+ {
+ g_warning ("Could not compute surface transform");
+ surface_transform_data->cached_surface_transform_valid = FALSE;
+ }
}
if (was_valid != surface_transform_data->cached_surface_transform_valid ||
return _gtk_widget_get_root (widget);
}
+/**
+ * gtk_widget_get_native:
+ * @widget: a #GtkWidget
+ *
+ * Returns the GtkNative widget that contains @widget,
+ * or %NULL if the widget is not contained inside a
+ * widget tree with a native ancestor.
+ *
+ * #GtkNative widgets will return themselves here.
+ *
+ * Returns: (transfer none) (nullable): the #GtkNative
+ * widget of @widget, or %NULL
+ */
+GtkNative *
+gtk_widget_get_native (GtkWidget *widget)
+{
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+ return GTK_NATIVE (gtk_widget_get_ancestor (widget, GTK_TYPE_NATIVE));
+}
+
static void
gtk_widget_real_direction_changed (GtkWidget *widget,
GtkTextDirection previous_direction)